home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / cuj1008.zip / RAMEY.ZIP / STEST.C < prev    next >
C/C++ Source or Header  |  1991-10-14  |  2KB  |  105 lines

  1. /*
  2. Copyright (c) Robert Ramey 1991. All Rights Reserved
  3. */
  4.  
  5. /* program to generate a test file file for sort program */
  6.  
  7. #define TMAX 512
  8. #define FMAX 8
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <memory.h>
  13. #include "arg.h"
  14.  
  15. char umsg[] =
  16. "usage: stest -n <number of records> [-s <size range>] -k <char table> ...\n\
  17. <char table> := <character>\n\
  18.              | <character range>\n\
  19. <character range> := <character>-<character>\n\
  20. <character> := '<ascii character>'\n\
  21.             | <decimal number>\n\
  22.             | 0x<hexidecimal number>\n";
  23.  
  24. main(argc, argv)
  25. int argc;
  26. char **argv;
  27. {
  28.     long int l;
  29.     char c, byte[TMAX], *bptr;
  30.     RANGE r, size;
  31.     int fcount, i, length;
  32.     struct {
  33.         int size;
  34.         char *bptr;
  35.     } field[FMAX];
  36.  
  37.     size.start = 2;
  38.     size.end = 512;
  39.     fcount = 0;
  40.     bptr = byte;
  41.     while(--argc > 0){
  42.         ++argv;
  43.         if(!strcmp(*argv, "-n")){
  44.             if(--argc == 0)
  45.                 error(umsg);
  46.             l = atol(*++argv);
  47.             continue;
  48.         }
  49.         else
  50.         if(!strcmp(*argv, "-k")){
  51.             if(fcount == FMAX)
  52.                 error("Too many fields");
  53.             bptr = byte;
  54.             while(--argc){
  55.                 if(*(argv+1)[0] == '-'){
  56.                     ++argc;
  57.                     break;
  58.                 }
  59.                 arg_range(*++argv,&r);
  60.                 if(r.start > 0xff || r.end > 0xff)
  61.                     error("character larger than 8 bits");
  62.                 do{
  63.                     *bptr++ = r.start++;
  64.                 }while(r.start <= r.end);
  65.             }
  66.             i =
  67.             field[fcount].size = bptr - byte;
  68.             if(i){
  69.                 bptr =
  70.                 field[fcount].bptr = malloc(i);
  71.                 memcpy(bptr, byte, i);
  72.                 ++fcount;
  73.             }
  74.         }
  75.         else
  76.         if(!strcmp(*argv, "-s")){
  77.             --argc;
  78.             arg_range(*++argv, &size);
  79.         }
  80.         else
  81.             error(umsg);
  82.     }
  83.     size.start -= 2;
  84.     size.end -= 2;
  85.     length =
  86.     i = 0;
  87.     for(;;){
  88.         c = field[i].bptr[rand() % field[i].size];
  89.         if(c == '\n' && length < size.start)
  90.             continue;
  91.         if(length++ == size.end){
  92.             c = '\n';
  93.         }
  94.         putchar(c);
  95.         if(c == '\n'){
  96.             length = 0;
  97.             if(--l == 0)
  98.                 break;
  99.             i = 0;
  100.         }
  101.         if(c == '\t' && i < fcount-1)
  102.             ++i;
  103.     }
  104. }
  105.